#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include "RingQueue.hpp"

void *consumer(void *args)
{
    RingQueue<int> *rq = static_cast<RingQueue<int> *>(args);

    // 消费者不断消费
    while (true)
    {
        // 消费者消费数据
        int t = 0;
        rq->Pop(&t);

        std::cout << "消费者拿到了一个数据："<< t << std::endl;
    }
}

void *productor(void *args)
{
    int data = 1;
    RingQueue<int> *rq = static_cast<RingQueue<int> *>(args);
    // 生产者不断生产
    while (true)
    {
        sleep(2);
        // 生产者向队列里派发任务
        std::cout << "生产了一个任务："<< data <<std::endl;
        rq->Equeue(data);
        data++;
    }
}

//这个代码既支持单生产，单消费
//也支持多生产，多消费
int main()
{
    // 申请队列空间
    RingQueue<int> *rq = new RingQueue<int>();

    // 构建生产和消费
    pthread_t c, p;
    pthread_create(&c, nullptr, consumer, rq);

    pthread_create(&p, nullptr, productor, rq);



    pthread_join(c, nullptr);

    pthread_join(p, nullptr);


    return 0;
}